
export type Post = {
  slug: string;
  title: string;
  excerpt: string;
  content: string;
  publishedDate: string;
  tags: string[];
  isLocal?: boolean;
};

const initialPosts: Post[] = [
  {
    slug: 'sakura-season-feelings',
    title: '樱花季的思绪',
    excerpt: '春风拂过，带来了樱花的讯息。每一片花瓣，都像是一个粉色的梦，轻轻飘落，诉说着短暂而绚烂的故事...',
    content: `春风拂过，带来了樱花的讯息。每一片花瓣，都像是一个粉色的梦，轻轻飘落，诉说着短暂而绚烂的故事。

漫步在樱花树下，阳光透过枝叶的缝隙，洒下斑驳的光影。空气中弥漫着淡淡的花香，沁人心脾。我想起去年此时，也是在这里，许下了小小的心愿。时间过得真快，一年过去了，有些事情变了，有些却依然如故。

樱花盛开时，热烈而纯粹；凋零时，决绝而凄美。这不就像我们的人生吗？有相聚的喜悦，也有离别的感伤。但正是这些经历，才构成了我们独一无二的风景。

我想把这份美好定格下来，用文字记录下此刻的心情。愿每一个人都能在樱花盛开的季节里，找到属于自己的那份温柔与感动。`,
    publishedDate: '2024年4月5日',
    tags: ['心情', '随笔', '樱花'],
  },
  {
    slug: 'a-cup-of-afternoon-tea',
    title: '一杯午后红茶的时光',
    excerpt: '阳光正好的午后，为自己泡一杯香气四溢的红茶，搭配几块精致的甜点，便是一段惬意的慢时光...',
    content: `阳光正好的午后，为自己泡一杯香气四溢的红茶，搭配几块精致的甜点，便是一段惬意的慢时光。

窗外的世界喧嚣忙碌，而我在这里，拥有一片属于自己的宁静。茶香袅袅，书页翻动，思绪也跟着飘远。这样的时刻，可以什么都想，也可以什么都不想，只是单纯地享受这份安逸。

生活需要偶尔的暂停，需要一些小小的仪式感来点缀。这杯红茶，就是给自己的温柔犒劳。它告诉我，无论多忙，都别忘了关照自己的内心。

品味茶的醇厚，感受生活的甜美。愿我们都能在平凡的日子里，找到属于自己的小确幸。`,
    publishedDate: '2024年3月18日',
    tags: ['生活', '红茶', '慢时光'],
  },
  {
    slug: 'journey-to-the-ancient-capital',
    title: '古都之旅',
    excerpt: '踏上前往古都的列车，心中充满了期待。那里的每一块青石板，每一座古老的建筑，似乎都在低语着千年的故事...',
    content: `踏上前往古都的列车，心中充满了期待。那里的每一块青石板，每一座古老的建筑，似乎都在低语着千年的故事。

穿梭在古老的街巷，仿佛穿越了时空。古寺的钟声，庭院的枯山水，都让人心生敬畏与平静。在这里，时间仿佛变慢了脚步，让人可以静下心来，与历史对话。

品尝了当地的特色美食，抹茶的微苦与和果子的香甜在口中交织，是古都独有的味道。这次旅行，不仅是视觉的宴，更是心灵的洗礼。

我将带着这份宁静与感悟，回到我的生活中。古都的记忆，将成为我心中一片永不褪色的风景。`,
    publishedDate: '2024年2月22日',
    tags: ['旅行', '古都', '摄影'],
  },
    {
    slug: 'summer-fireworks-festival',
    title: '夏夜的花火大会',
    excerpt: '夏日的夜晚，最期待的莫过于一场绚烂的花火大会。和重要的人一起，穿着浴衣，吃着苹果糖，仰望夜空...',
    content: `夏日的夜晚，最期待的莫过于一场绚烂的花火大会。和重要的人一起，穿着浴衣，吃着苹果糖，仰望夜空。

“砰”的一声，巨大的烟花在夜幕中绽放，化作万千星点，点亮了每个人的脸庞。那一刻的震撼与美丽，无法用言语形容。红的、蓝的、金色的光芒交织在一起，像一场盛大的梦境。

周围是人们的欢笑声和赞叹声，我们分享着同一片天空下的感动。夏夜的风带着一丝凉意，吹走了白天的燥热，也吹来了节日的欢乐气氛。

烟花虽然短暂，但那份绽放的美丽却永远留在了心里。这便是夏天最美好的记忆吧。`,
    publishedDate: '2023年8月15日',
    tags: ['夏天', '花火', '节日'],
  },
  {
    slug: 'the-cat-in-the-alley',
    title: '小巷里的那只猫',
    excerpt: '在回家的小巷里，我遇到了一只橘色的猫。它有着慵懒的眼神和优雅的步伐，仿佛是这条巷子的主人...',
    content: `在回家的小巷里，我遇到了一只橘色的猫。它有着慵懒的眼神和优雅的步伐，仿佛是这条巷子的主人。

我尝试着靠近它，它只是瞥了我一眼，然后继续悠闲地晒着太阳。它的世界简单而纯粹，没有烦恼，只有阳光、小鱼干和安稳的午觉。

有时我会想，做一只猫或许也不错。可以无忧无虑，可以对不喜欢的人和事报以高傲的无视。从它身上，我仿佛学到了一种从容的生活态度。

后来，我每天路过巷子都会和它打个招呼，虽然它不一定会理我。但知道它在那里，就觉得这条回家的路也变得温暖了起来。`,
    publishedDate: '2023年7月2日',
    tags: ['生活', '猫', '邂逅'],
  },
  {
    slug: 'long-post-for-summary',
    title: '一篇用于测试AI摘要的长文',
    excerpt: '这是一篇特意写得比较长的文章，旨在测试我们新引入的AI摘要功能是否能准确、流畅地概括文章主旨...',
    content: `这是一篇特意写得比较长的文章，旨在测试我们新引入的AI摘要功能是否能准确、流畅地概括文章主旨。在当今信息爆炸的时代，人们每天都需要处理海量的文本信息。无论是新闻、报告、学术论文还是博客文章，快速抓住核心内容变得至关重要。传统的阅读方式虽然深入，但耗时较长，对于希望快速筛选信息的用户来说效率不高。因此，自动文本摘要技术应运而生，它利用自然语言处理（NLP）和机器学习算法，将长篇文本压缩成简短、精炼的摘要，同时保留原文的关键信息和主旨。

我们的博客引入了这项技术，希望为读者提供更好的阅读体验。这个功能的核心是一个先进的语言模型，它经过了大量文本数据的训练，学会了理解语言的细微差别、识别关键句子和概念，并能生成通顺、连贯的摘要。与简单的提取式摘要（直接从原文中挑选句子）不同，我们采用的是生成式摘要，模型会用自己的“语言”重新组织和表达原文的核心思想，使得摘要更加自然和易于理解。

为了实现这个功能，我们的技术团队进行了一系列的研究和开发。首先，我们选择了一个性能卓越的基础模型，它在多项NLP任务中都表现出色。然后，我们利用一个包含“文章-摘要”对的高质量数据集对模型进行了微调，使其更适应博客文章这种文体的摘要任务。我们还设计了一套评估体系，从流畅度、相关性和信息完整性等多个维度来衡量摘要的质量，并根据评估结果不断迭代优化模型。

现在，读者在浏览篇幅较长的文章时，会看到一个“AI生成摘要”的按钮。点击后，系统会将文章内容发送到我们的后端服务，AI模型会迅速处理并返回一段简洁的摘要。我们希望这个小小的功能能够帮助您节省宝贵的时间，更快地判断一篇文章是否符合您的阅读兴趣。当然，AI技术并非完美，它生成的摘要可能偶尔会遗漏某些细节或存在理解偏差。因此，我们真诚地欢迎您在使用过程中提供宝贵的反馈，帮助我们不断改进这项功能，使其更好地为您服务。总之，技术是为了人服务的，我们希望通过这些小小的创新，让知识的获取变得更加轻松和高效。`,
    publishedDate: '2023年6月10日',
    tags: ['技术', 'AI', '博客功能'],
  },
];

const LOCAL_STORAGE_KEY = 'local_posts';

// Helper function to get posts from localStorage
const getLocalPosts = (): Post[] => {
  if (typeof window === 'undefined') {
    return [];
  }
  const localData = localStorage.getItem(LOCAL_STORAGE_KEY);
  return localData ? JSON.parse(localData) : [];
};

// Helper function to save posts to localStorage
const saveLocalPosts = (posts: Post[]) => {
  if (typeof window === 'undefined') {
    return;
  }
  localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(posts));
  window.dispatchEvent(new Event('storage'));
};

export const getPosts = (): Post[] => {
  const localPosts = getLocalPosts();
  return [...localPosts, ...initialPosts];
};

export const getPostBySlug = (slug: string): Post | undefined => {
  return getPosts().find(p => p.slug === slug);
};

export const addPost = (post: Omit<Post, 'slug' | 'publishedDate' | 'excerpt' | 'isLocal'>): Post => {
  const localPosts = getLocalPosts();
  const now = new Date();
  const newPost: Post = {
    ...post,
    slug: `local-${Date.now()}`,
    publishedDate: `${now.getFullYear()}年${now.getMonth() + 1}月${now.getDate()}日`,
    excerpt: post.content.substring(0, 100) + '...',
    isLocal: true,
  };
  const updatedPosts = [newPost, ...localPosts];
  saveLocalPosts(updatedPosts);
  return newPost;
};

export const updatePost = (slug: string, postUpdate: Omit<Post, 'slug' | 'publishedDate' | 'excerpt' | 'isLocal'>): Post | undefined => {
  const localPosts = getLocalPosts();
  let updatedPost: Post | undefined;
  const updatedPosts = localPosts.map(p => {
    if (p.slug === slug) {
      updatedPost = { 
        ...p,
        ...postUpdate,
        excerpt: postUpdate.content.substring(0, 100) + '...'
      };
      return updatedPost;
    }
    return p;
  });
  
  if (updatedPost) {
    saveLocalPosts(updatedPosts);
  }
  
  return updatedPost;
}


export const deletePost = (slug: string) => {
  if (typeof window === 'undefined') {
    return;
  }
  const localPosts = getLocalPosts();
  const updatedPosts = localPosts.filter(p => p.slug !== slug);
  saveLocalPosts(updatedPosts);
  window.dispatchEvent(new CustomEvent('post-deleted'));
};
